﻿using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using MS.InformationManagement.Support.Constants;
using MS.InformationManagement.Presenter.AllowingAccessControl;
using System.Collections.Generic;
using System.IO;
using System.Web;
using MS.InformationManagement.Presenter.Support;
using System.Linq;

namespace MS.InformationManagement.Controls._CONTROLTEMPLATES.InformationManagerControls
{
    public partial class AsociationToolBar : BaseControl, IAllowingAccessControlView
    {

        #region Properties

        public bool ShowEntradaExpediente { set { lnkEntrada.Visible = value;} }
        public bool ShowSalidaExpediente { set{  lnkSalida.Visible = value;} }
        public bool ShowInternoExpediente {set{ lnkInterno.Visible  = value;} }
        public bool ShowSalidaResponse { set{ lnkRespuesta.Visible = value;} }
        public bool DisableLinks 
        { 
            set 
            {  
                lnkEntrada.Enabled = !value;
                lnkSalida.Enabled = !value;
                lnkInterno.Enabled  = !value;
                lnkRespuesta.Enabled = !value;
                lnkEntrada.ToolTip = "Debe tipificar el radicado para utilizar estas opciones";
                lnkSalida.ToolTip = "Debe tipificar el radicado para utilizar estas opciones";
                lnkInterno.ToolTip = "Debe tipificar el radicado para utilizar estas opciones";
                lnkRespuesta.ToolTip = "Debe tipificar el radicado para utilizar estas opciones";
                
            } 
        }

        public string TooltipRadicado
        {
            set
            {
                lnkRespuesta.ToolTip = value;
            }
        }

        #endregion

        #region Form Events

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        #endregion

        #region Public Methods

        public void LoadControlLinks(string currentRadicado)
        {
            lnkEntrada.NavigateUrl = string.Format(GlobalConstants.URL_RADICADO_INCOMING + "?" + GlobalConstants.URL_ADDRESPONSETOEXPEDIENTE, currentRadicado, "new", "1");
            lnkSalida.NavigateUrl = string.Format(GlobalConstants.URL_RADICADO_OUTCOMING + "?" + GlobalConstants.URL_ADDRESPONSETOEXPEDIENTE, currentRadicado, "new", "1");
            lnkInterno.NavigateUrl = string.Format(GlobalConstants.URL_RADICADO_INTERNAL + "?" + GlobalConstants.URL_ADDRESPONSETOEXPEDIENTE, currentRadicado, "new", "1");
            lnkRespuesta.NavigateUrl = string.Format(GlobalConstants.URL_RADICADO_OUTCOMING + "?" + GlobalConstants.URL_ADDRESPONSETOEXPEDIENTE, currentRadicado, "response", "1");

            _presenter = new AllowingAccessControlPresenter(this);
            _presenter.HandleLoad();
        }


        #endregion

        private AllowingAccessControlPresenter _presenter;

        public bool Result { get; set; }

        public string CurrentUrl
        { 
            get
            {
                Uri uri = HttpContext.Current.Request.Url;
                return Path.GetFileName(uri.LocalPath).ToUpper();
            }
        }

        public List<DAL.DocumentCenter.Roles> AllowedRibbonActions { get; set; }

        public bool IsDialog { get { return false; } }

        public void Show()
        {
            try
            {
                if (AllowedRibbonActions == null)
                throw new Exception("El usuario no se encuentra configurado");


                Dictionary<string, string> acciones = new Dictionary<string, string>();

                var permitirEntrada = from act in AllowedRibbonActions
                                      where act.Role.ToUpper() == GlobalConstants.ROLE_RADICADO_ENTRADA
                                      select act;

                var permitirSalida = from act in AllowedRibbonActions
                                     where act.Role.ToUpper() == GlobalConstants.ROLE_RADICADO_SALIDA
                                      select act;

                if (permitirEntrada.Count() == 0)
                    lnkEntrada.Visible = false;

                if (permitirSalida.Count() == 0)
                {
                    lnkSalida.Visible = false;
                    lnkRespuesta.Visible = false;
                }
            }
            catch (Exception ex)
            {
                this.HandleError(ex);
            }
        }


        public bool IsInformed
        {
            get { return false; }
        }
    }
}
